#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    FILE *file;
    char filename[] = "example.txt";
    char buffer[100];
    
    // 1. 创建文件并写入数据
    printf("1. 创建文件并写入数据...\n");
    file = fopen(filename, "w");
    if (file == NULL) {
        printf("错误：无法创建文件！\n");
        return 1;
    }
    
    fprintf(file, "Hello, World!\n");
    fprintf(file, "这是C语言文件操作示例\n");
    fprintf(file, "数字：%d, 浮点数：%.2f\n", 42, 3.14159);
    
    fclose(file);
    printf("文件写入完成！\n\n");
    
    // 2. 读取文件内容
    printf("2. 读取文件内容...\n");
    file = fopen(filename, "r");
    if (file == NULL) {
        printf("错误：无法打开文件！\n");
        return 1;
    }
    
    printf("文件内容：\n");
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }
    fclose(file);
    printf("\n文件读取完成！\n\n");
    
    // 3. 追加数据到文件
    printf("3. 追加数据到文件...\n");
    file = fopen(filename, "a");
    if (file == NULL) {
        printf("错误：无法打开文件！\n");
        return 1;
    }
    
    fprintf(file, "这是追加的内容\n");
    fclose(file);
    printf("数据追加完成！\n\n");
    
    // 4. 再次读取显示追加后的内容
    printf("4. 显示追加后的文件内容...\n");
    file = fopen(filename, "r");
    if (file == NULL) {
        printf("错误：无法打开文件！\n");
        return 1;
    }
    
    printf("更新后的文件内容：\n");
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }
    fclose(file);
    printf("\n");
    
    // 5. 文件信息统计
    printf("5. 文件信息统计...\n");
    file = fopen(filename, "r");
    if (file == NULL) {
        printf("错误：无法打开文件！\n");
        return 1;
    }
    
    int line_count = 0;
    int char_count = 0;
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        line_count++;
        char_count += strlen(buffer);
    }
    fclose(file);
    
    printf("文件统计信息：\n");
    printf("行数：%d\n", line_count);
    printf("字符数：%d\n", char_count);
    printf("\n");
    
    // 6. 二进制文件操作示例
    printf("6. 二进制文件操作示例...\n");
    FILE *bin_file;
    int numbers[] = {10, 20, 30, 40, 50};
    int read_numbers[5];
    
    // 写入二进制数据
    bin_file = fopen("data.bin", "wb");
    if (bin_file == NULL) {
        printf("错误：无法创建二进制文件！\n");
        return 1;
    }
    fwrite(numbers, sizeof(int), 5, bin_file);
    fclose(bin_file);
    
    // 读取二进制数据
    bin_file = fopen("data.bin", "rb");
    if (bin_file == NULL) {
        printf("错误：无法打开二进制文件！\n");
        return 1;
    }
    fread(read_numbers, sizeof(int), 5, bin_file);
    fclose(bin_file);
    
    printf("从二进制文件读取的数据：\n");
    for (int i = 0; i < 5; i++) {
        printf("%d ", read_numbers[i]);
    }
    printf("\n\n");
    
    printf("所有文件操作演示完成！\n");
    printf("生成的文件：%s 和 data.bin\n", filename);
    
    return 0;
}
